package ligacaodados;

public class CanalRuidoso {
	private int[] trama;
	private int[] tramaComErros;
	private double pErro;
	private int[] padraoErro;

	public CanalRuidoso(int[] trama, double pErro) {
		this.trama = trama;
		this.pErro = pErro;
		padraoErro = new int[trama.length];
		padraoErro = geraPadraoErro();
		tramaComErros = xor(trama, padraoErro);

	}

	public int[] geraPadraoErro() {
		int[] aux = new int[trama.length];

		for (int i = 0; i != trama.length; i++) {
			double random = Math.random();
			if (random < pErro)
				aux[i] = 1;
			else
				aux[i] = 0;
		}
		return aux;
	}

	public int[] xor(int[] trama, int[] padrao) {
		int[] aux = new int[trama.length];

		for (int i = 0; i < padrao.length; i++) {
			if (trama[i] == 0 && padrao[i] == 0 || trama[i] == 1
					&& padrao[i] == 1)
				aux[i] = 0;
			else if (trama[i] == 0 && padrao[i] == 1 || trama[i] == 1
					&& padrao[i] == 0)
				aux[i] = 1;
		}
		return aux;
	}

	public int[] getTrama() {
		return tramaComErros;
	}

	public int[] getPadraoErro() {
		return padraoErro;
	}
}
